package algorithm;

import java.util.Arrays;

/**
 * @description: 类描述
 * @author: Fesine
 * @createTime:2017/8/1 9:35
 * @update:修改内容
 * @author: Fesine
 * @updateTime:2017/8/1 9:35
 */
public class SelectionSort {
    /**
     * 选择排序
     * 算法描述：对于给定的一组记录，
     * 经过第一轮比较后得到最小的记录，
     * 然后将该记录与第一个记录的位置进行交换；
     * 接着对不包括第一个记录以外的其他记录进行第二轮比较，
     * 得到最小的记录并与第二个记录进行位置交换；重复该过程，
     * 直到进行比较的记录只有一个时为止。
     * 3 6 4 2 11 10 5
     * 2 6 4 3 11 10 5
     * 2 3 4 6 11 10 5
     * 2 3 4 5 11 10 6
     * 2 3 4 5 6 10 11
     *
     * @param sorted
     */
    public static void selectionSort(int[] sorted) {
        int n = sorted.length;
        for (int i = 0; i < n; i++) {
            int k = i;
            for (int j = i+1; j < n; j++) {
                //i=0,j=1,k=0
                //i=0,j=2,k=0
                //i=0,j=3,k=0
                //i=0,j=4,k=3
                //i=0,j=5,k=3
                //i=0,j=6,k=3
                //i=1,j=2,k=1
                //i=1,j=2,k=2
                //i=1,j=3,k=3
                if (sorted[j] < sorted[k]) {
                    //记录值小的下标，继续使用小值和后面的结果比较
                    k = j;
                    System.out.println("k:"+k);
                }
            }
            if (k > i) {
                int tmp = sorted[i];
                sorted[i] = sorted[k];
                sorted[k] = tmp;
            }
        }

    }

    public static void main(String[] args) {
        int[] a = {3, 6, 4, 2, 11, 10, 5};
        selectionSort(a);
        System.out.println(Arrays.toString(a));
    }
}
